package demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28779
 * Date: 2023-04-12
 * Time: 18:40
 */
public class Test {
    public static void main(String[] args) {
        /**
         * Definition for singly-linked list.
         * class ListNode {
         *     int val;
         *     ListNode next;
         *     ListNode(int x) {
         *         val = x;
         *         next = null;
         *     }
         * }
         */
        public class Solution {
            public ListNode detectCycle(ListNode head) {
                if(head == null){
                    return null;
                }


                ListNode fast = head;
                ListNode slow = head;

                while(fast != null && fast.next != null){
                    fast = fast.next.next;
                    slow = slow.next;
                    if(fast == slow){
                        break;
                    }
                }

                if(fast == null || fast.next == null){
                    return null;
                }

                fast = head;
                while(fast != slow){
                    fast = fast.next;
                    slow = slow.next;
                }
                return fast;
            }
        }

        /**
         * Definition for singly-linked list.
         * class ListNode {
         *     int val;
         *     ListNode next;
         *     ListNode(int x) {
         *         val = x;
         *         next = null;
         *     }
         * }
         */
        public class Solution {
            public boolean hasCycle(ListNode head) {
                if(head == null){
                    return false;
                }

                ListNode fast = head;
                ListNode slow = head;

                while(fast != null && fast.next != null){
                    fast = fast.next.next;
                    slow = slow.next;
                    if(fast == slow){
                        return true;
                    }
                }
                return false;
            }
        }
    }
}
